malloc(), calloc(), realloc() এর মাধ্যমে মেমোরি বরাদ্দ করা

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference) Memory Management Functions (মেমোরি ম্যানেজমেন্ট ফাংশনস) |
195
195

malloc(), calloc(), realloc() এর মাধ্যমে মেমোরি বরাদ্দ করা

সি প্রোগ্রামিং ভাষায় ডাইনামিক মেমোরি ম্যানেজমেন্ট পরিচালনা করতে malloc(), calloc(), এবং realloc() ফাংশনগুলো ব্যবহার করা হয়। এই ফাংশনগুলো স্ট্যাটিক বা লকল মেমোরির পরিবর্তে রানটাইমে মেমোরি বরাদ্দ করার জন্য ব্যবহৃত হয়। ডাইনামিক মেমোরি বরাদ্দ করার ফলে প্রোগ্রামটি বেশি ফ্লেক্সিবল হয়, কারণ প্রোগ্রাম চলাকালীন সময়ে মেমোরি প্রয়োজনীয়তা পরিবর্তিত হতে পারে।

নিচে এই ফাংশনগুলোর ব্যবহার এবং কাজের বিস্তারিত আলোচনা করা হলো:


১. malloc() – মেমোরি বরাদ্দ করা

malloc() (memory allocation) ফাংশনটি একটি নির্দিষ্ট আকারের মেমোরি ব্লক বরাদ্দ করতে ব্যবহৃত হয় এবং মেমোরির শুরুতে একটি পয়েন্টার রিটার্ন করে। তবে, এটি বরাদ্দ করা মেমোরি ব্লকটি অ্যানডিফাইনড মান (garbage values) দিয়ে পূর্ণ রাখে, অর্থাৎ এতে কোনো প্রাথমিক মান থাকে না।

সিঙ্কট্যাক্স:

void *malloc(size_t size);
  • size – বরাদ্দ করতে চাওয়া মেমোরির আকার (বাইটে)।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    
    // 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ
    ptr = (int *)malloc(5 * sizeof(int));  

    if (ptr == NULL) {
        printf("Memory allocation failed.\n");
        return 1;  // মেমোরি বরাদ্দ ব্যর্থ
    }

    // বরাদ্দ করা মেমোরি ব্যবহার
    for (int i = 0; i < 5; i++) {
        ptr[i] = i + 1;
    }

    // আউটপুট
    for (int i = 0; i < 5; i++) {
        printf("%d ", ptr[i]);
    }

    // বরাদ্দকৃত মেমোরি মুক্ত করা
    free(ptr);

    return 0;
}

এখানে malloc() ফাংশনটি 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করেছে, এবং ptr পয়েন্টার দ্বারা সেই মেমোরি অ্যাক্সেস করা হয়েছে।


২. calloc() – মেমোরি বরাদ্দ এবং ইনিশিয়ালাইজেশন

calloc() (contiguous allocation) ফাংশনটি মেমোরির একটি ব্লক বরাদ্দ করে এবং সেই মেমোরির প্রতিটি অংশকে শূন্য (0) দিয়ে পূর্ণ করে দেয়। এটি malloc() এর মতো, তবে এটি মেমোরি বরাদ্দ করার পাশাপাশি বরাদ্দকৃত মেমোরি ইনিশিয়ালাইজও করে।

সিঙ্কট্যাক্স:

void *calloc(size_t num, size_t size);
  • num – বরাদ্দ করতে চাওয়া এলিমেন্টের সংখ্যা।
  • size – প্রতিটি এলিমেন্টের আকার (বাইটে)।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    
    // 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ এবং সবগুলোকে শূন্য দিয়ে পূর্ণ করা
    ptr = (int *)calloc(5, sizeof(int));  

    if (ptr == NULL) {
        printf("Memory allocation failed.\n");
        return 1;  // মেমোরি বরাদ্দ ব্যর্থ
    }

    // আউটপুট
    for (int i = 0; i < 5; i++) {
        printf("%d ", ptr[i]);  // সবগুলো ভ্যালু হবে 0
    }

    // বরাদ্দকৃত মেমোরি মুক্ত করা
    free(ptr);

    return 0;
}

এখানে calloc() ফাংশনটি 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করেছে এবং সবগুলোকে 0 দিয়ে পূর্ণ করেছে।


৩. realloc() – মেমোরি আকার পরিবর্তন করা

realloc() ফাংশনটি আগে বরাদ্দ করা মেমোরির আকার পরিবর্তন করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি আগের মেমোরি ব্লকটির আকার বাড়াতে বা কমাতে পারেন, এবং যদি নতুন মেমোরি বরাদ্দ করা হয়, তাহলে এটি পুরানো ডেটা সংরক্ষণ করবে।

সিঙ্কট্যাক্স:

void *realloc(void *ptr, size_t new_size);
  • ptr – মেমোরির আগের পয়েন্টার (যা malloc() বা calloc() এর মাধ্যমে বরাদ্দ করা হয়েছিল)।
  • new_size – নতুন মেমোরি আকার (বাইটে)।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    
    // 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ
    ptr = (int *)malloc(5 * sizeof(int));  

    if (ptr == NULL) {
        printf("Memory allocation failed.\n");
        return 1;  // মেমোরি বরাদ্দ ব্যর্থ
    }

    // পুরানো মেমোরিতে মান ইনপুট
    for (int i = 0; i < 5; i++) {
        ptr[i] = i + 1;
    }

    // নতুন আকারের জন্য মেমোরি বরাদ্দ (10টি ইন্টিজারের জন্য)
    ptr = (int *)realloc(ptr, 10 * sizeof(int));  

    if (ptr == NULL) {
        printf("Memory reallocation failed.\n");
        return 1;  // মেমোরি আকার পরিবর্তন ব্যর্থ
    }

    // নতুন মেমোরি ব্লকে মান ইনপুট
    for (int i = 5; i < 10; i++) {
        ptr[i] = i + 1;
    }

    // আউটপুট
    for (int i = 0; i < 10; i++) {
        printf("%d ", ptr[i]);
    }

    // বরাদ্দকৃত মেমোরি মুক্ত করা
    free(ptr);

    return 0;
}

এখানে realloc() ফাংশনটি মেমোরি আকার বাড়িয়ে 10টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করেছে এবং আগের 5টি মানের সাথে নতুন 5টি মান যোগ করেছে।


সারসংক্ষেপ

ফাংশনকাজসিঙ্কট্যাক্স
malloc()একটি নির্দিষ্ট আকারের মেমোরি বরাদ্দ করেvoid *malloc(size_t size);
calloc()একটি নির্দিষ্ট সংখ্যক এলিমেন্টের জন্য মেমোরি বরাদ্দ করে এবং সবগুলোকে 0 দিয়ে পূর্ণ করেvoid *calloc(size_t num, size_t size);
realloc()পূর্বে বরাদ্দ করা মেমোরির আকার পরিবর্তন করেvoid *realloc(void *ptr, size_t new_size);

এই ফাংশনগুলো ডাইনামিক মেমোরি ম্যানেজমেন্টের জন্য ব্যবহৃত হয় এবং প্রোগ্রামারদের মেমোরির কার্যকর ব্যবস্থাপনা করতে সহায়ক। malloc() এবং calloc() মেমোরি বরাদ্দ করতে ব্যবহৃত হয়, যেখানে malloc() যেকোনো মান দিয়ে বরাদ্দ করে এবং calloc() সবকিছু 0 দিয়ে পূর্ণ করে। realloc() মেমোরি আকার পরিবর্তন করতে ব্যবহৃত হয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion